////
////  MyNavigationStack.swift
////  casdon_swiftUI
////
////  Created by ww on 2025/4/12.
////
//
//import Foundation
//
//MultiStackNavigationFramework
//import SwiftUI
//
////enum PageID: Hashable, Codable {
////
////   // 登陆栈
////   case loginPwd
////   case forgetPwd
////   case loginSms
////   case register
////   case verificationCode(loginSmsViewModel: LoginSMSViewModel)
////   case webPage(url: String)
////
////   // 首页栈
////   case home
////   
////   // 生活圈
////   case lifeCircel
////   
////   // 我的
////   case mine
////   case exploreRecord
////   case serviceCenter
////   case mineSetting
////   case message
////   case accountAndSafe
////}
//
//enum NavigationKeys {
//   static let login = "login"
//   static let home = "home"
//   static let lifeCircel = "LifeCircle"
//   static let mine = "mine"
//}
//
//private struct NavigationStackKey: EnvironmentKey {
//   static let defaultValue: String? = nil
//}
//
//extension EnvironmentValues {
//   var navigationStackKey: String? {
//       get { self[NavigationStackKey.self] }
//       set { self[NavigationStackKey.self] = newValue }
//   }
//}
//
//final class NavigationRouter: ObservableObject {
//   @Published var path = NavigationPath() {
//       didSet {
//           syncPageIDsWithPath()
//       }
//   }
//
//   private(set) var pageIDs: [PageID] = []
//   private let storeEnable = false
//   var onAppear: ((PageID) -> Void)?
//   var onDisappear: ((PageID) -> Void)?
//
//   private let storageKey: String
//   private let stackKey: String
//   private let rootPage: PageID
//
//   init(storageKey: String, stackKey: String, rootPage: PageID) {
//       self.storageKey = storageKey
//       self.stackKey = stackKey
//       self.rootPage = rootPage
//       pageIDs = [rootPage]
//       restorePath()
//   }
//
//   private func syncPageIDsWithPath() {
//       if path.count < pageIDs.count {
//           let newCount = path.count
//           if pageIDs.count > 1 {
//               pageIDs = Array(pageIDs.prefix(newCount))
//           }
//           savePath()
//       }
//   }
//
//   func push(_ page: PageID) {
//       path.append(page)
//       pageIDs.append(page)
//       savePath()
//   }
//
//   func pop() {
//       guard !path.isEmpty else { return }
//       path.removeLast()
//       pageIDs.removeLast()
//       savePath()
//   }
//
//   func popToRoot() {
//       guard !path.isEmpty else { return }
//       path.removeLast(path.count)
//       pageIDs = [rootPage]
//       savePath()
//   }
//
//   func popTo(_ target: PageID) {
//       // 找到目标页的索引
//       guard let index = pageIDs.firstIndex(where: { $0 == target }) else { return }
//       let removeCount = path.count - index - 1
//       guard removeCount > 0 else { return }
//       path.removeLast(removeCount)
//       pageIDs.removeLast(removeCount)
//       savePath()
//   }
//
//   @ViewBuilder
//   func resolve(_ page: PageID) -> some View {
//       TrackedView(id: page, router: self) {
//           PageFactory.view(for: page)
//              // .navigationBarHidden(true) // 隐藏系统导航栏
//             //  .navigationBarBackButtonHidden(true) // 可选，隐藏系统返回按钮
////                .enableSwipeBackGesture(enable: !(page == self.rootPage))
//       }
//       .environment(\.navigationStackKey, stackKey)
//   }
//
//   private func savePath() {
//       if !storeEnable {
//           return
//       }
//       let encoder = JSONEncoder()
//       let pagesToSave = pageIDs
//       guard let data = try? encoder.encode(pagesToSave) else { return }
//       UserDefaults.standard.set(data, forKey: storageKey)
//   }
//
//   private func restorePath() {
//
//       let decoder = JSONDecoder()
//       guard let data = UserDefaults.standard.data(forKey: storageKey),
//             let pages = try? decoder.decode([PageID].self, from: data)
//       else {
//           // 如果没有存储，就保留 root
//           pageIDs = [rootPage]
//           path = NavigationPath()
//           path.append(rootPage)
//           return
//       }
//       path = NavigationPath(pages)
//       pageIDs = pages
//   }
//}
//
//struct TrackedView<Content: View>: View {
//   let id: PageID
//   weak var router: NavigationRouter?
//   let content: () -> Content
//   @Environment(\.navigationStackKey) private var stackKey
//
//   var body: some View {
//       content()
//
//           .onAppear {
//               router?.onAppear?(id)
//           }
//           .onDisappear {
//               router?.onDisappear?(id)
//           }
//   }
//}
//
//final class NavigationHelper: ObservableObject {
//   static let shared = NavigationHelper()
//   private init() {}
//
//   @Published var routers: [String: NavigationRouter] = [:]
//
//   func register(router: NavigationRouter, forKey key: String) {
//       routers[key] = router
//   }
//
//   func push(_ page: PageID, on key: String) {
//       routers[key]?.push(page)
//   }
//
//   func pop(on key: String) {
//       routers[key]?.pop()
//   }
//
//   func popTo(_ target: PageID, on key: String) {
//       routers[key]?.popTo(target)
//   }
//
//   func popToRoot(on key: String) {
//       routers[key]?.popToRoot()
//   }
//}
//
//enum PageFactory {
//   static func view(for page: PageID) -> AnyView {
//       switch page {
//       case .loginPwd:
//           AnyView(LoginPwdView())
//       case .forgetPwd:
//           AnyView(ForgetPwdView())
//       case .register:
//           AnyView(RegisterView())
//       case .loginSms:
//           AnyView(LoginSMSView())
//       case let .verificationCode(viewModel):
//           AnyView(VerificationCodeView(viewModel: viewModel))
//       case let .webPage(url):
//           AnyView(WebPageView(url: url))
//       case  .home:
//           AnyView(HomeView())
//       case .lifeCircel:
//           AnyView(LifeCircleView())
//       case .mine:
//           AnyView(MineView())
//       case .exploreRecord:
//           AnyView(ExploreRecordView())
//       case .serviceCenter:
//           AnyView(ServiceCenterView())
//       case .mineSetting:
//           AnyView(MineSettingView())
//       case .message:
//           AnyView(MineMessageView())
//       case .accountAndSafe:
//           AnyView(MineAccountAndSafeView())
//           
//       }
//   }
//}
